package com.code.p9.代理模式.静态代理;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 描述: describe
 *
 * @author CodeYang_Site
 * @version 2021/6/7 0:49
 */
public class MyInvocationHandler implements InvocationHandler {

    //1.被代理对象
    private Object target = null;

    //2.通过构造函数传递一个对象
    public MyInvocationHandler(Object target) {
        this.target = target;
    }

    /**
     * 代理方法
     * InvocationHandler是由代理实例的调用处理程序实现的接口。
     * 每个代理实例都有一个关联的调用处理程序。 当在代理实例上调用方法时，方法调用被编码并分派到其调用处理程序的invoke方法。
     *
     * @param proxy 代理对象
     * @param method 代理的方法
     * @param args 代理方法执行的参数
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 执行被代理的方法
        //所有通过动态代理实现的方法全部通过invoke方法调用
        return method.invoke(this.target,args);
    }
}
